package com.songlanyun.modules.account.entity;

import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.ReUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.songlanyun.common.drive.RootEntity;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

/**
 * 会员的信息表（如昵称，头像等）
 *
 * @author Mark
 * @email sunlightcs@gmail.com
 * @date 2020-11-06 14:07:42
 */
@Data
@TableName("yxt_user_info")
public class UserInfoEntity extends RootEntity<Long, UserInfoEntity> implements Serializable {
    private static final long serialVersionUID = 1L;

    {
        this.nickname = "";
        this.headPhoto = "";
        this.realName = "";
        this.areaCode = "";
        this.cityCode = "";
        this.provinceCode = "";
        this.area = "";
        this.city = "";
        this.province = "";
        this.resume = "";
        this.language = "";
        this.country = "";
    }

    /**
     * 会员信息id(对应相同的帐户Id)
     */
    @TableId(type = IdType.INPUT)
    private Long id;
    /**
     * 昵称
     */
    @NotBlank(message = "昵称不能为空")
    @Length(min = 1, max = 50, message = "昵称长度在1-50个字")
    private String nickname;

    /**
     * 昵称脱敏
     */
    public String getNicknameDesensitized() {
        boolean isMatch = ReUtil.isMatch("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$", this.nickname);
        if (StringUtils.isNotEmpty(this.nickname) && isMatch) {
            return DesensitizedUtil.mobilePhone(this.nickname);
        }
        return this.nickname;
    }

    /**
     * 头像
     */
    @NotBlank(message = "头像不能为空")
    private String headPhoto;
    /**
     * 年龄
     */
//    @NotBlank(message = "年龄不能为空")
    private Integer age;
    /**
     * 性别
     * 0：未知、
     * 1：男、
     * 2：女
     */
    @NotNull(message = "性别不能为空")
    private Integer gender;
    /**
     * 语言
     */
    private String language;
    /**
     * 国家
     */
    private String country;
    /**
     * 生日
     */
//    @NotBlank(message = "生日不能为空")
    private String birthday;
    /**
     * 真实姓名
     */
//    @NotBlank(message = "真实姓名不能为空")
    private String realName;

    public String loadResRealName() {
        //真实姓名脱敏
        return StringUtils.isNotBlank(this.getRealName()) ? DesensitizedUtil.chineseName(this.getRealName()) : this.getNickname();
    }

    public String loadRealName() {
        return StringUtils.isNotBlank(this.getRealName()) ? this.getRealName() : this.getNickname();
    }

    /**
     * 区编号
     */
//    @NotBlank(message = "区编号不能为空")
    private String areaCode;
    /**
     * 市编号
     */
//    @NotBlank(message = "市编号不能为空")
    private String cityCode;
    /**
     * 省编号
     */
//    @NotBlank(message = "省编号不能为空")
    private String provinceCode;
    /**
     * 区名称
     */
//    @NotBlank(message = "区名称不能为空")
    private String area;
    /**
     * 市名称
     */
//    @NotBlank(message = "市名称不能为空")
    private String city;
    /**
     * 省名称
     */
//    @NotBlank(message = "省名称不能为空")
    private String province;
    /**
     * 个人简介
     */
//    @NotBlank(message = "个人简介不能为空")
    private String resume;
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @Override
    public Long getIdentity() {
        return id;
    }

    public void adminInit() {
        this.nickname = "平台商家";
        this.realName = "平台商家";
    }
}
